package com.lsiyun.sync_file;

import cn.hutool.crypto.SecureUtil;
import com.lsiyun.sync_file.protocol.SyncFile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;

public class Test {
    public static void main(String[] args) throws IOException {
        // SyncFile syncFile = new SyncFile();
        // syncFile.getFileName();
        // syncFile.setFileName("");

        // System.out.println(calcMd5("F:\\Program Files\\JetBrains\\IntelliJ IDEA Community Edition 2023.3.4\\bin/idea64.exe"));

        // File file = new File("F:/1234/");
        // file.mkdirs();
        // long start = file.lastModified();
        //
        // // new File(file, "xxx").mkdirs();
        //
        // System.out.println(start == file.lastModified());

        // 测试文件和目录的创建时间和修改时间
        File file = new File("F:/12345/");
        if (file.exists()) {
            file.delete();
        }
        file.mkdirs();
        BasicFileAttributes attributes = Files.readAttributes(Path.of(file.toURI()), BasicFileAttributes.class);
        // 测试新建文件夹的创建时间和修改时间是否一致
        System.out.println("创建时间：" + attributes.creationTime());
        System.out.println("修改时间：" + attributes.lastModifiedTime());
        System.out.println("测试新建文件夹的创建时间和修改时间是否一致：" + (attributes.lastModifiedTime().toMillis() == attributes.creationTime().toMillis()));
        file.setLastModified(file.lastModified() + 1000);
        System.out.println("测试修改-上次修改时间，文件夹修改时间是否可被修改：" + (attributes.lastModifiedTime().toMillis() != file.lastModified()));

        long lastTime = file.lastModified();
        new File(file, "123/").delete();
        new File(file, "123/").mkdirs();
        System.out.println("测试修改-修改文件夹内容，文件夹修改时间是否被修改：" + (lastTime != file.lastModified()));

        lastTime = file.lastModified();
        FileOutputStream fileOutputStream = new FileOutputStream(new File(file, "文件"));
        fileOutputStream.write(123454);
        fileOutputStream.flush();
        fileOutputStream.close();
        System.out.println("测试修改-修改文件内容，文件夹修改时间是否被修改：" + (lastTime != file.lastModified()));

        SyncFile syncFile = new SyncFile(file.getParent(), file.getName());
        lastTime = syncFile.getUpdateTime();
        fileOutputStream = new FileOutputStream(new File(file, "文件"));
        fileOutputStream.write(123454);
        fileOutputStream.flush();
        fileOutputStream.close();
        syncFile = new SyncFile(file.getParent(), file.getName());
        System.out.println("测试SyncFile修改-修改文件内容，文件夹修改时间是否被修改：" + (lastTime != syncFile.getUpdateTime()));

        // lastTime = file.lastModified();
        //
        // System.out.println("测试修改-修改文件夹内的文件内容，文件夹修改时间是否被修改：" + (lastTime != file.lastModified()));

    }

    /**
     * 计算MD5值
     *
     * @param path 本地的文件路径
     * @return
     */
    public static String calcMd5(String path) {
        return SecureUtil.md5(new File(path));
    }
}
